Replace download_url with /file endpoint#478
Conversation
❌ 3 Tests Failed:
View the top 3 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
There was a problem hiding this comment.
Pull request overview
This PR updates the SDK’s artifact download flow to stop relying on the deprecated download_url field and instead obtain fresh presigned URLs via the Platform’s /v1/runs/{run_id}/artifacts/{artifact_id}/file endpoint. It also regenerates the OpenAPI client to the newer API version and adds unit tests around the new download behavior.
Changes:
- Add
Run.get_artifact_download_url()and use it when downloading output artifacts (replacingartifact.download_urlusage). - Update application download helpers to fetch a fresh presigned URL per artifact before downloading.
- Regenerate OpenAPI spec + generated client/docs (new endpoint, scheduling fields, model updates, API version bump).
Reviewed changes
Copilot reviewed 4 out of 48 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/aignostics/application/download_test.py | Adds unit tests for download_item_artifact using the new presigned-URL fetching flow. |
| src/aignostics/platform/resources/runs.py | Adds get_artifact_download_url() and switches artifact download logic to use /file endpoint-derived URLs. |
| src/aignostics/application/_download.py | Updates artifact downloading to request a fresh presigned URL via Run.get_artifact_download_url(). |
| codegen/out/docs/PublicApi.md | Documents new /file endpoint and updated API parameters. |
| codegen/out/aignx/codegen/rest.py | Updates generated client metadata to API version 1.3.0+dev.... |
| codegen/out/aignx/codegen/models/version_read_response.py | Regenerated model (adds regex validator and typing changes). |
| codegen/out/aignx/codegen/models/validation_error_loc_inner.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/validation_error.py | Regenerated model (adds input/ctx fields). |
| codegen/out/aignx/codegen/models/user_read_response.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/scheduling_response.py | New generated model for run scheduling fields in responses. |
| codegen/out/aignx/codegen/models/scheduling_request.py | New generated model for run scheduling constraints in requests. |
| codegen/out/aignx/codegen/models/run_termination_reason.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/run_state.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/run_read_response.py | Regenerated model (adds scheduling). |
| codegen/out/aignx/codegen/models/run_output.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/run_item_statistics.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/run_creation_response.py | Regenerated model (makes run_id required). |
| codegen/out/aignx/codegen/models/run_creation_request.py | Regenerated model (adds scheduling). |
| codegen/out/aignx/codegen/models/output_artifact_visibility.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/output_artifact_scope.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/output_artifact_result_read_response.py | Regenerated model (marks download_url deprecated, adjusts fields). |
| codegen/out/aignx/codegen/models/output_artifact.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/organization_read_response.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/me_read_response.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/item_termination_reason.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/item_state.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/item_result_read_response.py | Regenerated model (adds error_code field ordering/structure changes). |
| codegen/out/aignx/codegen/models/item_output.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/item_creation_request.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/input_artifact_creation_request.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/input_artifact.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/http_validation_error.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/custom_metadata_update_response.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/custom_metadata_update_request.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/artifact_termination_reason.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/artifact_state.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/artifact_output.py | Regenerated header/version update (enum values aligned to new API). |
| codegen/out/aignx/codegen/models/application_version.py | Regenerated model (adds regex validator and typing changes). |
| codegen/out/aignx/codegen/models/application_read_short_response.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/application_read_response.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/models/init.py | Regenerated exports list to include new/updated models. |
| codegen/out/aignx/codegen/exceptions.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/configuration.py | Regenerated header/version update + debug report API version string. |
| codegen/out/aignx/codegen/api_client.py | Regenerated header/version update. |
| codegen/out/aignx/codegen/api/public_api.py | Regenerated API client (adds /file endpoint, updates paths/params). |
| codegen/out/.openapi-generator/FILES | Updates generated file manifest with new scheduling models. |
| codegen/in/openapi.json | Updates input OpenAPI spec (new endpoint, scheduling, deprecations, version bump). |
| codegen/in/archive/openapi_1.3.0+dev.305920c97bb.json | Adds archived OpenAPI snapshot for the new API version. |
| response = requests.get( | ||
| url, | ||
| headers=dict(header_params), | ||
| allow_redirects=False, | ||
| timeout=settings().run_timeout, | ||
| ) |
| if response.status_code == requests.codes.temporary_redirect: | ||
| location = response.headers.get("Location") | ||
| if not location: | ||
| msg = f"307 redirect received but Location header is absent for artifact {artifact_id!r}" | ||
| raise RuntimeError(msg) | ||
| return location | ||
| response.raise_for_status() | ||
| msg = ( | ||
| f"Unexpected status {response.status_code} from artifact URL endpoint " | ||
| f"for artifact {artifact_id!r}; expected 307 redirect" | ||
| ) | ||
| raise RuntimeError(msg) |
There was a problem hiding this comment.
The actual endpoint never returns 200
| with patch("aignostics.application._utils.get_file_extension_for_artifact", return_value=".tiff"): | ||
| download_item_artifact(progress, mock_run, artifact, tmp_path) |
| with patch("aignostics.application._utils.get_file_extension_for_artifact", return_value=".tiff"): | ||
| existing_file = tmp_path / "result.tiff" |
c9d8ba5 to
cd1c406
Compare
There was a problem hiding this comment.
Pull request overview
This PR updates artifact downloading to stop relying on the deprecated download_url field and instead fetch fresh presigned URLs via the new GET /v1/runs/{run_id}/artifacts/{artifact_id}/file endpoint (capturing the 307 Location redirect). It also refreshes the generated OpenAPI client/spec to include the new endpoint and related schema changes.
Changes:
- Add
Run.get_artifact_download_url()and use it for artifact downloads (platform + application download flows). - Update unit tests to cover the new redirect-based URL retrieval.
- Regenerate OpenAPI artifacts/spec (new endpoint, new scheduling models, schema tweaks, base-path fixes).
Reviewed changes
Copilot reviewed 6 out of 50 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/aignostics/platform/resources/runs_test.py | Adds unit tests for redirect-based presigned URL retrieval via the new /file endpoint. |
| tests/aignostics/application/download_test.py | Import formatting only (no functional change). |
| src/aignostics/platform/resources/runs.py | Implements get_artifact_download_url() and switches run artifact downloading to use it. |
| src/aignostics/application/_download.py | Switches per-artifact download flow to request fresh presigned URLs from the run before downloading. |
| codegen/out/docs/PublicApi.md | Documents the new artifact URL endpoint and updated list-runs query param docs. |
| codegen/out/aignx/codegen/rest.py | Bumps embedded OpenAPI document version string (generated). |
| codegen/out/aignx/codegen/models/version_read_response.py | Generated semver regex validation for version_number. |
| codegen/out/aignx/codegen/models/validation_error_loc_inner.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/validation_error.py | Generated additions for input and ctx fields. |
| codegen/out/aignx/codegen/models/user_read_response.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/scheduling_response.py | New generated model for scheduling fields in run responses. |
| codegen/out/aignx/codegen/models/scheduling_request.py | New generated model for scheduling constraints in run creation. |
| codegen/out/aignx/codegen/models/run_termination_reason.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/run_state.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/run_read_response.py | Adds generated scheduling field support in run responses. |
| codegen/out/aignx/codegen/models/run_output.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/run_item_statistics.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/run_creation_response.py | Makes run_id required in generated response model. |
| codegen/out/aignx/codegen/models/run_creation_request.py | Adds generated scheduling field for run creation payloads. |
| codegen/out/aignx/codegen/models/output_artifact_visibility.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/output_artifact_scope.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/output_artifact_result_read_response.py | Marks download_url deprecated in schema + adjusts ordering/optionality. |
| codegen/out/aignx/codegen/models/output_artifact.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/organization_read_response.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/me_read_response.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/item_termination_reason.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/item_state.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/item_result_read_response.py | Adds generated error_code field and adjusts schema serialization. |
| codegen/out/aignx/codegen/models/item_output.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/item_creation_request.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/input_artifact_creation_request.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/input_artifact.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/http_validation_error.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/custom_metadata_update_response.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/custom_metadata_update_request.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/artifact_termination_reason.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/artifact_state.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/artifact_output.py | OpenAPI version string update (generated, includes new output statuses). |
| codegen/out/aignx/codegen/models/application_version.py | Generated semver regex validation for application version numbers. |
| codegen/out/aignx/codegen/models/application_read_short_response.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/application_read_response.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/models/init.py | Reorders/extends generated model exports (adds scheduling models). |
| codegen/out/aignx/codegen/exceptions.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/configuration.py | Updates debug report API version string (generated). |
| codegen/out/aignx/codegen/api_client.py | OpenAPI version string update (generated). |
| codegen/out/aignx/codegen/api/public_api.py | Adds new generated endpoint + fixes resource paths to avoid double /api prefix. |
| codegen/out/.openapi-generator/FILES | Adds scheduling model files to the generator manifest. |
| codegen/in/openapi.json | Updates source OpenAPI spec: new /file endpoint, deprecations, new fields, auth URLs. |
| codegen/in/archive/openapi_1.3.0+dev.305920c97bb.json | Adds archived OpenAPI snapshot for the regenerated version. |
| CHANGELOG.md | Removes trailing blank lines at end of file. |
| mock_get.assert_called_once_with( | ||
| "https://api.example.com/v1/runs/test-run-id/artifacts/art-1/file", | ||
| headers={}, | ||
| allow_redirects=False, | ||
| timeout=mock_get.call_args[1]["timeout"], | ||
| ) |
| @pytest.mark.parametrize( | ||
| ("status_code", "expected_message"), | ||
| [ | ||
| (200, "Unexpected status 200 from artifact URL endpoint"), | ||
| (307, "307 redirect received but Location header is absent"), | ||
| (404, "Unexpected status 404 from artifact URL endpoint for artifact 'art-1'; expected 307 redirect"), | ||
| ], | ||
| ) | ||
| @pytest.mark.unit | ||
| def test_get_artifact_download_url_errors(app_run, mock_serialize, status_code, expected_message) -> None: | ||
| """Test that get_artifact_download_url raises RuntimeError after unexpected result. | ||
|
|
||
| Args: | ||
| app_run: Run instance with mock API. | ||
| mock_serialize: Mock serializer configured on the API. | ||
| status_code: The HTTP status code to simulate in the response. | ||
| expected_message: The expected error message to be included in the RuntimeError. | ||
| """ | ||
| # Arrange | ||
| mock_response = MagicMock() | ||
| mock_response.__enter__ = Mock(return_value=mock_response) | ||
| mock_response.__exit__ = Mock(return_value=False) | ||
| mock_response.status_code = status_code | ||
| mock_response.headers = {} # No Location header | ||
|
|
||
| with ( | ||
| patch("aignostics.platform.resources.runs.requests.get", return_value=mock_response), | ||
| pytest.raises(RuntimeError, match=expected_message), | ||
| ): | ||
| app_run.get_artifact_download_url("art-1") |
| if file_path.exists(): | ||
| file_checksum = calculate_file_crc32c(file_path) | ||
| if file_checksum != checksum: | ||
| logger.trace("Resume download for {} to {}", artifact.name, file_path) | ||
| print(f"> Resume download for {artifact.name} to {file_path}") if print_status else None | ||
| else: | ||
| continue | ||
| else: | ||
| downloaded_at_least_one_artifact = True | ||
| logger.trace("Download for {} to {}", artifact.name, file_path) | ||
| print(f"> Download for {artifact.name} to {file_path}") if print_status else None | ||
|
|
| msg = f"Download operation failed unexpectedly for run {self.run_id}: {e}" | ||
| raise RuntimeError(msg) from e | ||
|
|
||
| @staticmethod | ||
| def ensure_artifacts_downloaded( | ||
| self, |
cd1c406 to
82d3c3f
Compare
82d3c3f to
ad8178d
Compare
There was a problem hiding this comment.
Pull request overview
Updates the SDK’s run artifact downloading flow to stop relying on the deprecated download_url field and instead obtain fresh presigned URLs via the platform’s /v1/runs/{run_id}/artifacts/{artifact_id}/file endpoint (307 redirect).
Changes:
- Add
Run.get_artifact_download_url()to fetch presigned URLs by intercepting the 307 redirect. - Update artifact download code paths to use the new
/fileendpoint instead ofartifact.download_url. - Regenerate OpenAPI client and docs to include the new endpoint and updated API schema/version.
Reviewed changes
Copilot reviewed 6 out of 50 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tests/aignostics/platform/resources/runs_test.py | Adds unit tests for Run.get_artifact_download_url() redirect/headers/error behavior. |
| tests/aignostics/application/download_test.py | Reformats imports after download flow changes. |
| src/aignostics/platform/resources/runs.py | Implements /file-based presigned URL retrieval and updates run download logic to use it. |
| src/aignostics/application/_download.py | Uses Run.get_artifact_download_url() to download artifacts instead of artifact.download_url. |
| codegen/out/docs/PublicApi.md | Documents new GET /v1/runs/{run_id}/artifacts/{artifact_id}/file endpoint and updated API params. |
| codegen/out/aignx/codegen/rest.py | Regenerated client metadata for OpenAPI 1.4.0. |
| codegen/out/aignx/codegen/models/version_read_response.py | Regenerated model updates (incl. version regex validation). |
| codegen/out/aignx/codegen/models/validation_error_loc_inner.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/validation_error.py | Regenerated model to include input/ctx fields. |
| codegen/out/aignx/codegen/models/user_read_response.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/scheduling_response.py | New generated model for run scheduling response fields. |
| codegen/out/aignx/codegen/models/scheduling_request.py | New generated model for run scheduling request fields. |
| codegen/out/aignx/codegen/models/run_termination_reason.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/run_state.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/run_read_response.py | Adds scheduling field to run response model. |
| codegen/out/aignx/codegen/models/run_output.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/run_item_statistics.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/run_creation_response.py | Updates run creation response schema (run_id now required). |
| codegen/out/aignx/codegen/models/run_creation_request.py | Adds optional scheduling to run creation request. |
| codegen/out/aignx/codegen/models/output_artifact_visibility.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/output_artifact_scope.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/output_artifact_result_read_response.py | Marks download_url deprecated in schema and reshuffles fields. |
| codegen/out/aignx/codegen/models/output_artifact.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/organization_read_response.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/me_read_response.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/item_termination_reason.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/item_state.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/item_result_read_response.py | Adds error_code and adjusts required fields/order. |
| codegen/out/aignx/codegen/models/item_output.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/item_creation_request.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/input_artifact_creation_request.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/input_artifact.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/http_validation_error.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/custom_metadata_update_response.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/custom_metadata_update_request.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/artifact_termination_reason.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/artifact_state.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/artifact_output.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/application_version.py | Adds version regex validation to generated model. |
| codegen/out/aignx/codegen/models/application_read_short_response.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/application_read_response.py | Regenerated model header/version update. |
| codegen/out/aignx/codegen/models/init.py | Regenerated export ordering and includes new scheduling models. |
| codegen/out/aignx/codegen/exceptions.py | Regenerated client metadata for OpenAPI 1.4.0. |
| codegen/out/aignx/codegen/configuration.py | Regenerated client metadata for OpenAPI 1.4.0 and debug report string. |
| codegen/out/aignx/codegen/api_client.py | Regenerated client metadata for OpenAPI 1.4.0. |
| codegen/out/aignx/codegen/api/public_api.py | Adds generated API method for /file endpoint and updates resource paths/params. |
| codegen/out/.openapi-generator/FILES | Tracks newly generated files (scheduling models). |
| codegen/in/openapi.json | Updates OpenAPI input spec to 1.4.0 and adds /file endpoint + schema updates. |
| codegen/in/archive/openapi_1.3.0+dev.305920c97bb.json | Adds archived OpenAPI spec snapshot for 1.3.0+dev build. |
| CHANGELOG.md | Removes trailing blank lines at end of file. |
| def get_artifact_download_url(self, artifact_id: str) -> str: | ||
| """Fetch a fresh presigned download URL for a specific output artifact. | ||
|
|
||
| Calls ``GET /v1/runs/{run_id}/artifacts/{artifact_id}/file``. The | ||
| endpoint responds with a ``307 Temporary Redirect`` whose ``Location`` | ||
| header carries the presigned download URL. Because urllib3 follows | ||
| redirects automatically the URL is captured by intercepting the redirect | ||
| with ``requests`` (``allow_redirects=False``), using the endpoint URL | ||
| and auth headers obtained from the generated client's serializer so that | ||
| no path strings are hardcoded here. | ||
|
|
There was a problem hiding this comment.
Pull request overview
This PR updates the SDK to stop relying on the deprecated download_url field and instead fetch fresh presigned artifact URLs via the new GET /v1/runs/{run_id}/artifacts/{artifact_id}/file endpoint (redirect Location header). It also updates the generated OpenAPI client artifacts to API spec version 1.4.0.
Changes:
- Add
Run.get_artifact_download_url()and switch artifact downloads/previews to use the/fileendpoint redirectLocation. - Update GUI artifact preview/download actions to resolve fresh URLs on-demand.
- Regenerate OpenAPI client code/docs for API
1.4.0(new endpoint + scheduling models, various schema updates).
Reviewed changes
Copilot reviewed 8 out of 53 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
src/aignostics/platform/resources/runs.py |
Adds get_artifact_download_url() and switches artifact download flow to use fresh presigned URLs. |
src/aignostics/application/_download.py |
Downloads item artifacts using a freshly resolved presigned URL instead of artifact.download_url. |
src/aignostics/application/_gui/_page_application_run_describe.py |
GUI preview/download now resolves the presigned URL from the artifact id via the run API. |
src/aignostics/application/_utils.py |
Removes printing of deprecated download_url in run item output. |
tests/aignostics/platform/resources/runs_test.py |
Adds unit tests for get_artifact_download_url() behavior on redirects and error cases. |
tests/aignostics/application/download_test.py |
Formatting-only import change. |
codegen/in/openapi.json (+ archive) |
Updates OpenAPI spec input to 1.4.0 and archives it. |
codegen/out/** |
Regenerated client/models/docs reflecting OpenAPI 1.4.0. |
Makefile |
Tweaks codegen sed invocation (currently breaks GNU sed portability). |
CHANGELOG.md |
Removes trailing blank lines at EOF. |
| # in codegen/out/public_api.py replace all occurrences of resource_path='/v1 with resource_path='/api/v1 | ||
| # Use portable sed syntax: -i'' works on both macOS and Linux | ||
| sed -i"" "s|resource_path='/v1|resource_path='/api/v1|g" codegen/out/aignx/codegen/api/public_api.py | ||
| sed -i "" "s|resource_path='/v1|resource_path='/api/v1|g" codegen/out/aignx/codegen/api/public_api.py |
| def csv_dialog_open(title: str, artifact_id: str) -> None: | ||
| """Open the CSV dialog.""" | ||
| csv_view_dialog_content.refresh(title=title, url=url) | ||
| download_url = Run.for_run_id(run_id).get_artifact_download_url(artifact_id) | ||
| csv_view_dialog_content.refresh(title=title, url=download_url) | ||
| csv_view_dialog.open() |
| def tiff_dialog_open(title: str, artifact_id: str) -> None: | ||
| """Open the TIFF dialog. | ||
|
|
||
| Args: | ||
| title (str): The title of the TIFF dialog. | ||
| url (str): The URL of the TIFF image. | ||
| artifact_id: (str): The ID of the artifact containing the TIFF to display. | ||
|
|
|




No description provided.